package kiven.jee.dao;

import java.io.Serializable;
import java.util.List;

/**
 * DAO 通用接口
 * 
 * @author kiven
 * @date 2013-02-28
 *
 * @param <E>
 * @param <PK>
 */
public interface IBaseDao<E extends Serializable,PK extends Serializable> {
	/**
	 * 根据PK查询是否存在
	 * 
	 * @param id PK
	 * @return
	 */
	public boolean exists(PK id);
	
	/**
	 * 保存对象
	 * 
	 * @param entity 要保存的对象
	 * @return
	 */
	public void save(E entity);
	
	/**
	 * 删除对象
	 * 
	 * @param entity
	 * @return
	 */
	public void remove(E entity);
	
	/**
	 * 依主键删除对象
	 * 
	 * @param id
	 * @return
	 */
	public void removeById(PK id);
	
	/**
	 * 将主键数组中的数据删除
	 * 
	 * @param ids
	 */
	public void removeAllByIds(PK[] ids);
	
	/**
	 * 修改
	 * 
	 * @param entity
	 */
	public void update(E entity);
	
	/**
	 * 依PK查询
	 * 
	 * @param pk
	 * @return
	 */
	public E findById(PK id);
	
	/**
	 * 返回所有数据
	 * 
	 * @return
	 */
	public List<E> findAll();
	
	/**
	 * 根据页数，及每页显示几条查询结果
	 * 
	 * @param page
	 * @param pageSize
	 * @return
	 */
	public List<E> findAll(int pageNO,int pageSize);
	
	/**
	 * 获得在id之前第pageNO的资料，每页显示pageSize笔资料
	 * 
	 * @param id pk
	 * @param pageNO 页码
	 * @param pageSize 页大小
	 * @return
	 */
	public List<E> pre(PK id,int pageNO,int pageSize);
	
	/**
	 * 获得在id之后第pageNO页的资料，每页显示PageSize笔资料
	 * 
	 * @param id pk
	 * @param pageNO 页码
	 * @param pageSize 页大小
	 * @return
	 */
	public List<E> next(PK id,int pageNO,int pageSize);
	
	/**
	 * 获得资料总笔数
	 * 
	 * @return
	 */
	public Integer getTotalAll();
	
}
